package cn.edu.bzu.ie.sf.mealsmisweb.controller;

import cn.edu.bzu.ie.sf.mealsmisweb.common.MyUtils;
import cn.edu.bzu.ie.sf.mealsmisweb.entity.Userinfo;
import cn.edu.bzu.ie.sf.mealsmisweb.service.UserinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.CommonDataSource;
import java.util.List;

/**
 * @version v1.0.0
 * @Package : cn.edu.bzu.ie.sf.mealsmisweb.controller
 * @Description : TODO
 * @Create on : 2021/8/7 22:13
 * @author: Feng Song 宋锋
 **/
@RestController
@RequestMapping(value="/user")
public class UserinfoController {
    @Autowired
    private UserinfoService userinfoService;    // 用户业务实例

    /**
     * 获取所有的用户信息，用于支队管理员管理所有的用户信息
     * @return 所有的用户信息列表
     */
    @RequestMapping(value="/getAllUserList")
    public List<Userinfo> getAllUserList(){
//        PageHelper.startPage(pageReq.getPageIndex(), pageReq.getPageSize());
//        List<User> users = userMapper.selectByExample(e);

        return userinfoService.getAllUserList();
    }

    /**
     * 获取某个大队下的所有的用户信息，用于大队管理员管理所有的用户信息
     * @param depid 大队id
     * @return 大队中的用户信息列表
     */
    @RequestMapping(value="/getAllUserListByDepid")
    public List<Userinfo> getAllUserListByDepid(int depid){
        return userinfoService.getAllUserListByDepid(depid);
    }

    /**
     * 获取某个用户信息，用于密码的编辑，但是在android中可以直接从adapter中传值到修改界面
     * @param id 用户的id
     * @return Userinfo用户信息实例
     */
    @RequestMapping(value="/getUserinfoById")
    public Userinfo getUserinfoById(int id){
        return userinfoService.getUserinfoById(id);
    }

    /**
     * 根据用户名和用户密码检查用户信息，用于用户登录
     * @param uname 用户名
     * @param upass 用户密码，未加密
     * @return Userinfo 实例
     */
    @PostMapping(value="/login")
    public Userinfo getUserinfoByUnameAndUpass(String uname, String upass){
        upass = MyUtils.getMd5Str(upass);
        Userinfo item = userinfoService.getUserinfoByUnameAndUpass(uname, upass);
        System.out.println(item);
        return item;
    }

    /**
     * 自动根据用户名和用户密码检查用户信息，用于用户登录后，每次进入系统时的操作
     * @param uname 用户名
     * @param upass 用户密码，已经加过密了
     * @return Userinfo 实例
     */
    @PostMapping(value="/autoLogin")
    public Userinfo getUserinfoByUnameAndUpassAuto(String uname, String upass){
        Userinfo item = userinfoService.getUserinfoByUnameAndUpass(uname, upass);
        System.out.println(item);
        return item;
    }


    /**
     * 找回密码的方法的方法
     * @param uname 用户名
     * @param phone 手机号
     * @param email 邮箱
     * @return boolean是否修改，里面有一个值不正确时，不能修改，全部正确时才能进行修改
     */
    @PostMapping(value = "/findPwd")
    public Boolean findPwd(String uname, String phone, String email){
        boolean flag = false;
        Userinfo item = userinfoService.getUserinfoByUnamePhoneEmail(uname, phone, email);
        if(item!=null){
            item.setUpass(MyUtils.getMd5Str("123456"));   // 将密码修改成123456
            userinfoService.editUserinfo(item);
            flag = true;
        }
        return flag;
    }

    /**
     * 管理员找回密码的方法
     * @param id 用户的id
     * @return boolean 修改是否成功，false不成功，true成功
     */
    @PostMapping(value="/findPwdByAdmin")
    public Boolean findPwdByAdmin(int id){
        boolean flag = false;
        Userinfo item = userinfoService.getUserinfoById(id);
        if(item!=null){
            item.setUpass(MyUtils.getMd5Str("123456"));
            userinfoService.editUserinfo(item);
            flag = true;
        }
        return flag;
    }

    /**
     * 检查用户名是否存在了
     * @param uname 要检查的用户名
     * @return int 个数: 0-未被使用，>0已经被使用
     */
    @PostMapping(value="/chkUnameExist")
    public int chkUnameExist(String uname){
        return userinfoService.chkUnameExist(uname);
    }

    /**
     * 添加用户信息
     * @param item 要添加的用户信息
     * @return int 影响的行数
     */
    @PostMapping(value = "/addUserinfo")
    public int addUserinfo(Userinfo item){
        item.setCreate_dt(MyUtils.getDateTimeStrFromNow());
        return userinfoService.addUserinfo(item);
    }

    /**
     * 修改用户信息
     * @param item 要修改的用户信息
     * @return int 影响的行数
     */
    @PostMapping(value="/editUserinfo")
    public int editUserinfo(Userinfo item){
        return userinfoService.editUserinfo(item);
    }

    /**
     * 删除用户信息
     * @param id 要删除用户的id
     * @return int 影响的行数
     */
    @PostMapping(value="/delUserinfo")
    public int delUserinfo(int id){
        return userinfoService.delUserinfo(id);
    }

}
